package com.example.redisson.redisson;

import jakarta.annotation.Resource;
import org.redisson.api.RBucket;
import org.redisson.api.RList;
import org.redisson.api.RMap;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;

@Service
public class RedissonService {

    @Resource
    private RedissonClient redissonClient;

    /**
     * Redisson 数据读写操作示例，参考 https://www.bookstack.cn/read/redisson-wiki-zh/6.-%e5%88%86%e5%b8%83%e5%bc%8f%e5%af%b9%e8%b1%a1.md
     */
    public void redisson() {
        // 获取缓存 Cache 对象，如果不存在则创建一个
        // 获取一个桶（bucket）来存储数据，对于缓存 Cache 对象的内容类型可以通过泛型指定。不指定的话，默认为 Object 类型。
        RBucket<String> bucket = redissonClient.getBucket("exampleKey");
        // 设置数据
        bucket.set("Hello, Redisson!");
        // 获取数据
        String value = bucket.get();
        System.out.println(value);


        // 使用分布式集合，参考 https://www.bookstack.cn/read/redisson-wiki-zh/7.-%E5%88%86%E5%B8%83%E5%BC%8F%E9%9B%86%E5%90%88.md
        // 获取一个 RList 对象，如果不存在则创建一个
        RList<String> exampleList = redissonClient.getList("exampleList");
        exampleList.add("Item 1");
        exampleList.add("Item 2");
        exampleList.add("Item 3");
        // 获取列表中的元素
        System.out.println(exampleList.getFirst());


        // 获取一个 RMap 对象，如果不存在则创建一个
        RMap<String, String> map = redissonClient.getMap("exampleMap");
        // 设置键值对
        map.put("key1", "Hello World");
        map.put("key2", "Hello Redisson!");
        // 获取键值对
        String data = map.get("key1");
        System.out.println("Value: " + data);
    }

}
